from visual import *
from visual.filedialog import get_file
from time import sleep

def graficar(file):
    
    #file = get_file()
    # Abro archivo de log con datos de posiciones, velocidades y fuerzas
    input = open (file, 'r')
    #input = get_file()
    
    
    pos = []
    vel = []
    
    
    
    balls = []
    arrows = []
    time = 0
    i = 0
    
    for line in input.readlines():
        
        #visual.rate(100)
        #scene.autoscale = False
        # uso ; para separar los datos de los parametros
        
        #sleep(0.01)
        
        if ';' in line:
            continue
        
        # Separo datos
        data = line.split(',')
        
        # Recupero valor de dt
        t = int( data[0] )
        
        scale = 5
        vscale = .4
        # Recupero valores de coordenadas X e Y
        x_0 = float(data[1])
        y_0 = float(data[2])
        
        # Recupero valores de la velocidad
        vx_0 = float(data[3])
        vy_0 = float(data[4])
        
        if time != t:
            i = 0
            time += 1
            
        if time == 0:
            balls.append(sphere(pos=vector(x_0, y_0, 0)*scale, radius=0.15, color=color.green))
            arrows.append(arrow(pos=balls[i].pos, axis= vector(vx_0, vy_0, 0)*vscale , color=color.red))
            # Aumento contador de cantidad de agentes
            pos.append((x_0, y_0))
            vel.append((vx_0, vy_0))
            i += 1
        
            continue
        
        
        if time == 1 and i==0:
            visual.scene.center = centro_de_masa(balls)
            raw_input('Apriete tecla')
        
        pos[i] = (x_0, y_0)
        vel[i] = (vx_0, vy_0)
        # Si ya tengo los valores de todos los agentes, actualizo posiciones
        if i == len(balls) -1:
            rate(100)
            visual.scene.center = centro_de_masa(balls)
            for j in range(len(balls)):
                # Actualizo la posicion
                balls[j].pos = pos[j]
                arrows[j].pos = balls[j].pos
                arrows[j].axis = vector(vel[j])*vscale
            
        i += 1

def centro_de_masa(datos):
    # Variables para coordenadas de centro de masa
    x_cm = 0
    y_cm = 0
    
    # Variable para guardar la masa total del sistema
    M = 0
    
    for dato in datos:
        
        # Calculo el peso de cada posicion
        x_cm += dato.x
        y_cm += dato.y
        M += 1
    
    # Calculo coordenadas del centro de masa
    r_cm = [ x_cm/M, y_cm/M ]
    
    return r_cm
    

# Por si corro el archivo con el comando 'python ploteo.py'
if __name__ == "__main__":
    
    # Llamo a funcion para graficar
    graficar(sys.argv[1])
    #graficar()

        